#include <stdio.h>
#include <string.h>

#include <encoding_manager.h>
#include <fonts_manager.h>



static int ascii_GetUnicodeFromBuffer(unsigned char *bufstart, unsigned char *bufend, unsigned int *unicode)
{
    if (bufstart >= bufend) {
        return 0; // 文件结束
    }
    unsigned char first_byte = *bufstart;

    // ascii码用一个byte表示一个字符
    if (first_byte >= 0x00 && first_byte <= 0x7f)
    {
        *unicode = first_byte;
        return 1; // 返回1表示ascii码用1byte表示一个字符
    }
    else
        return -1; // 无效的ascii编码
}




// 返回1表示支持ascii编码，返回0表示不支持
static int SupportAscii(unsigned char *bufhead)
{
    if (*bufhead >= 0x00 && *bufhead <= 0x7f)
    {
        return 1;
    }
    else
        return 0;
}





static EncodingOpr ascii_EncodingOpr =
{
    .name = "ascii",
    .iHeadLen = 0, // ascii编码没有bom
    .GetUnicodeFromBuffer = ascii_GetUnicodeFromBuffer,
    .Support = SupportAscii,
};



void RegisterAsciiEncoding(void)
{
    RegisterEncodingOpr(&ascii_EncodingOpr);
}



// 为ascii_EncodingOpr设置支持ascii编码格式的字体
int SetSupportFontForAscii(void)
{   
    AddFontOprToEncodingOpr(GetFontOprByName("ft"), &ascii_EncodingOpr);
    AddFontOprToEncodingOpr(GetFontOprByName("ascii"), &ascii_EncodingOpr);
    return 0;
}

